package common.model.Entity;

import lombok.Getter;
import lombok.Setter;

/**
 * 用户实体类，表示系统中的用户对象。
 * <p>
 * 该类继承自 {@link BaseEntity}，包含用户的基本信息，例如用户名、密码、角色、联系方式等。
 * </p>
 */
@Getter
@Setter
public class User extends BaseEntity {

    /**
     * 用户名（唯一标识用户登录）
     */
    private String username;

    /**
     * 用户密码（需加密存储）
     */
    private String password;

    /**
     * 用户角色，对应 {@code UserRole} 枚举中的值
     */
    private Integer role;

    /**
     * 用户状态（1 表示启用，0 表示禁用）
     */
    private Integer status;

    /**
     * 用户邮箱
     */
    private String Email;

    /**
     * 用户联系电话
     */
    private String Phone;

    /**
     * 用户真实姓名
     */
    private String realName;

    /**
     * 用户性别（true 表示男，false 表示女）
     */
    private Boolean Gender;

    /**
     * 用户头像地址（存储头像图片路径或 URL）
     */
    private String Avatar;

    /**
     * 无参构造方法，创建一个默认的用户对象。
     */
    public User() {}

    /**
     * 带参构造方法，创建一个用户对象并初始化基本属性。
     *
     * @param id        用户 ID
     * @param username  用户名
     * @param password  密码
     * @param role      用户角色
     * @param Email     邮箱
     * @param Phone     电话
     * @param RealName  真实姓名
     * @param Gender    性别（true=男，false=女）
     * @param Avatar    头像地址
     */
    public User(Long id, String username, String password, Integer role, String Email,
                String Phone, String RealName, Boolean Gender, String Avatar) {
        super(id);
        this.username = username;
        this.password = password;
        this.role = role;
        this.status = 1; // 默认启用
        this.Avatar = Avatar;
        this.Email = Email;
        this.Phone = Phone;
        this.realName = RealName;
        this.Gender = Gender;
    }

    /**
     * 拷贝构造方法，根据已有用户对象创建新的用户对象。
     *
     * @param us 被拷贝的用户对象
     */
    public User(User us) {
        super(us.getId());  // 调用父类构造函数，复制 ID
        this.username = us.username;
        this.password = us.password;
        this.role = us.role;
        this.status = us.status;
        this.Email = us.Email;
        this.Phone = us.Phone;
        this.realName = us.realName;
        this.Gender = us.Gender;
        this.Avatar = us.Avatar;
    }

    /**
     * 返回用户对象的字符串表示形式。
     *
     * @return 包含用户关键信息的字符串
     */
    @Override
    public String toString() {
        return "User{" +
                "id=" + getId() +
                ", username='" + username + '\'' +
                ", name='" + getRealName() + '\'' +
                ", role=" + role +
                ", status=" + status +
                ", createdAt=" + getCreatedAt() +
                ", Avatar=" + getAvatar() +
                '}';
    }
}
